//
//  WBBaseViewController.swift
//  ZWWEIBO
//
//  Created by xzw on 2017/11/21.
//  Copyright © 2017年 xzw. All rights reserved.
//

import UIKit

 //MARK: - 主控制器
class WBBaseViewController: UIViewController {
    
    //访客信息
    var vistorInfoDic : [String : String]?
    
    var tableView : UITableView?
    
    //刷新控件
    var refreshControl : UIRefreshControl?
    
    //上拉刷新标记
    var isPullup = false
    
    //自定义导航条
    lazy var navigationBar = WBNavigationBar(frame:CGRect(x: 0, y:0, width: UIScreen.main.bounds.size.width, height: 64))
    
    //自定义navgationItem
    lazy var navItem = UINavigationItem()
    
    override func loadView() {
        super.loadView()
        print("重新执行")
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        setupUI()
        WBNetworkManager.sharedInstance.userLogin ? loadData() : () //登陆才进行网络请求
        
        //注册登录成功通知
        NotificationCenter.default.addObserver(self, selector: #selector(loginSuccess), name: NSNotification.Name(rawValue: WBUserLoginSuccessNotification), object: nil)
    }
    
    //重写title的didSet
    override var title: String?{
        didSet{
            navItem.title = title
        }
    }
    
    //加载数据-具体的实现由子类去实现
    @objc func loadData(){
        //如果子类不实现该方法，默认关闭
       refreshControl?.endRefreshing()
    }
}

 //MARK: - 注册／登陆按钮监听
extension WBBaseViewController{
    
     //MARK: - 登录成功通知
    @objc fileprivate func loginSuccess(n:Notification){
        
        //清楚导航栏注册、登录按钮
        navItem.leftBarButtonItem = nil
        navItem.rightBarButtonItem = nil
        
        //登录成功切换界面，登录界面取消，换成数据界面
        view = nil //执行该语句会重新执行loadView()，viewDidLoad()方法
        NotificationCenter.default.removeObserver(self) //便面执行viewDidLoad()方法时，重新注册通知
    }
    
    @objc fileprivate func login(){
        //登陆
        NotificationCenter.default.post(name: NSNotification.Name(rawValue: WBUserShouldLoginNotification), object: nil)
    }
    @objc fileprivate func register(){
        print("注册")
    }
}


 //MARK: - 设置界面
extension WBBaseViewController{
    
   fileprivate func setupUI(){
    
     view.backgroundColor = UIColor.white
     setupNavigationBar()
     WBNetworkManager.sharedInstance.userLogin ? setupTableView() : setupVisitorView()
    
    }
    
    //设置访客视图
    fileprivate func setupVisitorView(){
        let visionView = WBVisitorView(frame: view.bounds)
        view.insertSubview(visionView, belowSubview: navigationBar)
        
        //添加按钮注册监听
        visionView.loginButton.addTarget(self, action: #selector(login), for: .touchUpInside)
        visionView.registerButton.addTarget(self, action: #selector(register), for: .touchUpInside)
        
        //赋值
        visionView.vistorInfo = vistorInfoDic
        
        //设置导航栏注册登录按钮
        navItem.leftBarButtonItem = UIBarButtonItem(title: "注册",style: .plain, target: self, action: #selector(register))
        navItem.rightBarButtonItem = UIBarButtonItem(title: "登陆", style: .plain, target: self, action: #selector(login))
        
    }
    
    //设置表格视图,这个是登录以后做的事儿
    @objc func setupTableView(){
        
        tableView = UITableView(frame: view.bounds, style: .plain)
        view.insertSubview(tableView!, belowSubview: navigationBar)
        
        //设置数据源和代理
        tableView?.dataSource = self
        tableView?.delegate = self
        if #available(iOS 11.0, *) {
            tableView?.contentInsetAdjustmentBehavior = .never
            
        } else {
            self.automaticallyAdjustsScrollViewInsets = false //ios11被废弃了
        }
        //设置内容缩进
        tableView?.contentInset = UIEdgeInsets(top: navigationBar.bounds.height, left: 0, bottom: tabBarController?.tabBar.bounds.height ?? 49, right: 0)
        
        //设置tabview滚动指示器缩进
        tableView?.scrollIndicatorInsets = tableView!.contentInset
        
        //实例化控件,添加到表格视图
        refreshControl = UIRefreshControl()
        tableView?.addSubview(refreshControl!)
        
        refreshControl?.addTarget(self, action: #selector(loadData), for: .valueChanged)
        
    }
    
    //设置导航栏
    private func setupNavigationBar(){
        //添加导航条
        view.addSubview(navigationBar)
        
        //将item添加到UINavigationBar
        navigationBar.items = [navItem]
        
        //设置navgationbar背景渲染颜色
        navigationBar.barTintColor = UIColor.cz_color(withHex: 0xf6f6f6)
        
        //设置系统导航栏左右按钮的颜色
        navigationBar.tintColor = UIColor.orange
        
        //设置navgationbar标题字体颜色
        navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor:UIColor.darkGray]
    }
}

//MARK: - 表格代理
extension WBBaseViewController : UITableViewDelegate,UITableViewDataSource {
    
     //MARK: - 基类只是准备方法，子类负责具体实现
     //子类的数据源方法不需要super
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 0
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        return UITableViewCell()
    }
    
    //在显示最后一行的时候，做上拉刷新
    func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
        //1. 判断indexPath 是否是最后一行
        let row = indexPath.row
        let section = tableView.numberOfSections - 1
        if row < 0 || section < 0 {
            return
        }
        let count = tableView.numberOfRows(inSection: section)
        if row == (count - 1) && !isPullup {
            isPullup = true
            //开始刷新
            loadData()
        }
       
    }
}
